<HTML><HEAD><TITLE>GRUB4DOS 其他相关</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.2900.3059" name=GENERATOR>
<link href="cmd.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY>
<table width=all align="left">  <TR><TD><h1>GRUB4DOS其他相关:</h1></TD></TR>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<HR>
<TABLE width="300" align="left" frame=box rules=all>
  <TBODY>
    <TR>
      <TD align="left" valign="middle"><p><A href="#a">1、启动菜单快捷键 </A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#b">2、使用数字键来选择菜单项</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#c">3、使用一个单一的键来选择菜单项</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#d">4、为菜单项添加帮助文字</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#e">5、标题间的限制或注释</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#f">6、GRUB.EXE 用法</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#g">7、操作符 '&&' and '|| ' and '!'</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#h">8、操作符 '|' and '>' and '>>'</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#i">9、相对路径支持的新特性</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#j">10、当前根设备的符号</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#k">11、引导小数点文件夹下的文件</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#l">12、在固定位置访问一些内部变量</A></p></TD>
    </TR>
    <TR>
      <TD align="left" valign="middle"><p><A href="#m">13、GRUB4DOS的批处理脚本支持</A></p></TD>
    </TR>
  </TBODY>
</TABLE>
<H2><A name=a>启动菜单快捷键</A></H2>
<p> 在启动菜单上可以使用下面命令来操作grub： </p>
<p>  <span class="Options">e</span>:编辑当前的启动菜单项</p>
<p>  <span class="Options">a</span>:添加内核的启动参数</p>
<p>  <span class="Options">c</span>:进入grub的命令行方式（即grub shell）</p>
<p>  <span class="Options">b</span>:启动当前的菜单项</p>
<p>  <span class="Options">d</span>:删除当前行</p>
<p>  <span class="Options">esc</span>:返回grup启动菜单界面，取消对当前菜单项所做的任何修改</p>

<HR>

<H2><A name=b>使用数字键来选择菜单项</A></H2>
<p><br>
  例如，如果你想要选择第25项菜单项，你可以先按下数字键2 之后再按下 5 。<br>
</p>
<HR>

<H2><A name=c>使用一个单一的键来选择菜单项</A></H2>
<p class="style1">Some machines have a simplified keyboard. The keyborad might have only the number keys 0 .. 9 plus a few other keys. When the menu displayed, the usercan strike a key for 8 times. When the menu handler detects the continuous single keypress, it will assume the user want to use this key to select a menuitem and boot. This single key will act as the RIGHT-ARROW key for the user toselect a menu item. And 5 seconds later after the user stops the keypress,the selected menu item will automatically boot. Any normal keys can be used asa single key for this purpose, except for a few functional keys like b, e,Enter, etc. Once another key is pressed, the feature of Single-Key-Selectionwill disappear immediately.</p>
<p><br>
  <span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一些机器具有简化的键盘。这些键盘可能只有数字键 0 到 9 ，外加少数几个其他键。当菜单还未显示时，使用者可以按下某个键 8 次。当菜单控制模块发现一个连续的单一按键时，它将认为使用者希望使用这个键来选择菜单和启动。这个单一的键可以充当右方向键来为使用者选择菜单。然后在使用者停止按键的 5 秒之后，被选择的菜单项将自动启动。任何的标准键可以被作为单一的键来达到这个目的，除了少数功能键，比如 b ，e ，回车键，等等。一旦另外的键被按下，单键选择特性将立即消失。</span></p>
<p>&nbsp;</p>
<HR>

<H2><A name=d>为菜单项添加帮助文字</A></H2>

<p>当你选择一个菜单项时，屏幕底部的帮助文字将发生变化。</p>
<p>  你可以在标题行中添加你的帮助文字。帮助文字必须用&quot;\n&quot; 开头，示例：
</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;<span class="Options">title</span><span class="bat"> This is the title</span><span class="Options">\n</span><span class="bat">This is the help text.</span><span class="Options">\n</span><span class="bat">And this is the 2nd line of the help text.</span></p>
<p>下面是一些 C 语言风格的引用符号的说明：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;\NNN （1到3位）八进制值 NNN 表示的字符<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;\\ 反斜杠<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;\a 警报 （声音）<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;\b   退格符<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;\f 换页符<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;\n 换行符<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;\r 回车符<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;\t 水平制表符<BR>
  &nbsp;&nbsp;&nbsp;&nbsp;\v   垂直制表符<BR>
&nbsp;&nbsp;&nbsp;&nbsp;\xHH （1到2位）十六进制值为 HH 的字节</p>
<HR>

<H2><A name=e>标题间的限制或注释</A></H2>
<p>把标题用来做限制或注释是可能的。</p>
<p>如果一个标题（或菜单项）下所有的菜单命令都是非启动敏感的，它被叫做是不可启动的。</p>
<p>即，进入菜单后不能通过上方向键、下方向键选中该项菜单（可通过左方向键、右方向键等选中）。</p>
<p>下面的命令是启动敏感的（而其他命令是非启动敏感的）</p>
<p>  <a href="./GRUB4DOS5命令索引.htm#boot">boot</a></p>
<p>  <a href="./GRUB4DOS5命令索引.htm#chainloader">chainloader</a></p>
<p><a href="./GRUB4DOS5命令索引.htm#configfile">configfile</a></p>
<p><a href="./GRUB4DOS5命令索引.htm#commandline">commandline</a></p>
<p><a href="./GRUB4DOS5命令索引.htm#halt">halt</a></p>
<p><a href="./GRUB4DOS5命令索引.htm#kernel">kernel</a></p>
<p><a href="./GRUB4DOS5命令索引.htm#pxe">pxe</a></p>
<p><a href="./GRUB4DOS5命令索引.htm#quit">quit</a></p>
<p><a href="./GRUB4DOS5命令索引.htm#reboot">reboot</a></p>
<HR>

<H2><A name=f></A>GRUB.EXE 用法</H2>
<p> GRUB [--bypass] [--time-out=T] [--hot-key=K] [--config-file=FILE]  [--keep-pxe]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;旁路       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;暂停时间        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;热键         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;配置文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保持 pxe stack<br>
  <br>
  1、这里的<span class="Options"> FILE</span> ，例如，可以是 (hd0,0)/menu.lst<br>
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;在 CONFIG.SYS 中，其配置行类似于：</p>
<blockquote>
  <p><span class="bat">install=c:\some\where\grub.exe --config-file=FILE</span></p>
</blockquote>
<p><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果没有使用选项，GRUB.EXE简单的使用(hd0,0)/menu.lst来作为配置文件(只要它存在的话)。这里的分区(hd0,0)可以是一个Windows分区或者是一个linux分区，或者是被 GRUB 支持的其他任意分区。</span></p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE 可以是菜单的内容。使用分号来分隔嵌入 FILE 中的命令。FILE 可以被一对双引号括起来，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;示例1：</p>
<blockquote>
  <p><span class="cmd">GRUB --config-file=&quot;root (hd0,0);chainloader +1&quot;<br>
  </span>#这条命令将启动(hd0,0)上的系统。</p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;示例2：</p>
<blockquote>
  <p><span class="cmd">GRUB --config-file=&quot;reboot&quot;<br>
  </span>#这条命令将令机器重启。</p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;示例3：</p>
<blockquote>
  <p><span class="cmd">GRUB --config-file=&quot;halt&quot;<br>
  </span>#这条命令将令机器关闭。</p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果 FILE 的起始两个字符是&ldquo; <span class="Options">#@</span> &rdquo;,那么 FILE 中其余的部分将被视为一个DOS风格的文件名。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;例如:</p>
<blockquote>
  <p><span class="cmd">GRUB --config-file=&quot;#@c:\menu.lst&quot;</span></p>
</blockquote>
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOS风格的文件只有起始的4kB被使用。此文件应当是一个未被压缩的文本文件。 </p>
<p> <span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;注意：你也可以在SHELL或者在CONFIG.SYS的INSTALL配置行使用&lsquo;DOS风格文件直接访问&rsquo;。但不要在DEVICE 配置行使用它。DOS文档中表述了DOS设备驱动不能使用'打开文件'的DOS调用。</span></p>
<p> &nbsp;&nbsp;&nbsp;&nbsp;作为默认，GRUB.EXE将按以下顺序查找它的配置文件：</p>
<blockquote>
  <p> <span class="bat">（DOS风格文件） .\menu.lst, 当前目录下的MENU.LST。</span></p>
  <p class="bat">（DOS风格文件） \menu.lst, 当前驱动器根目录下的MENU.LST</p>
  <p class="bat">（GRUB风格文件） /menu.lst, 启动设备根目录下的MENU.LST</p>
</blockquote>
<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认的启动设备还是(hd0,0)。</p>
<p> 2、如果选项 <span class="Options">--bypass</span> 被指定，GRUB将在暂停时间截止后从DOS退出。</p>
<p class="style1">3、选项'<span class="Options">--time-out=T</span>' 指定了以秒计时的暂停值。如果指定了--bypass则T的默认值为5 ，而--bypass选项没有被指定时默认值为0 。 </p>
<p class="style1"> 4、默认的<span class="Options">热键</span>值是 0x3920 (即空格键)。如果此键被按下，GRUB将正常启动。如果其他键被按下，GRUB 将立即终止并返回到DOS。可以参见 README_GRUB4DOS.txt 中的 &ldquo;int16 键盘扫描码&rdquo;</p>
<p>5、GRUB4DOS的默认退出时自动卸载pxe strack。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果你希望在引导后继续使用PXE功能,比如用于RIS安装,这时必须使用 <span class="Options">--keep-pxe</span> 选项。</p>
<p> 注意：每个选项最多只能被指定一次。<br>
</p>
<HR>

<H2><A name=g>操作符 ' &amp;&amp; ' and ' || '</A> and ' ! '</H2>
<p>'&amp;&amp;'的用法：</p>
<blockquote>
  <p class="bat">command1 <span class="Options">&amp;&amp;</span> command2</p>
  <p>如果 command1 返回 真，那么 command2 将执行</p>
</blockquote>
<p>'||'的用法：</p>
<blockquote>
  <p class="bat">command1 <span class="Options">||</span> command2</p>
  <p>如果 command1 返回 假，那么 command2 将执行</p>
</blockquote>
<p>'!'的说法（要求至少有一个&amp;&amp; 或 ||联合使用）</p>
<blockquote>
  <p>相当于else的功能。</p>
  <p class="bat">if command1 <span class="Options">&amp;&amp;</span> command2 <span class="Options">!</span> command3</p>
  <p>如果 command1 返回 真 ，就执行command2 ，否则执行command3</p>
  <p class="bat">if command1 <span class="Options">||</span> command2 <span class="Options">!</span> command3</p>
  <p>如果command1返回 假 ，就执行command2 ，否则执行command3</p>
<p>（通常嵌套使用）</p>
</blockquote>
<p>例一：</p>
<blockquote>
  <p>is64bit &amp;&amp; default 0</p>
  <p>is64bit || default 1</p>
</blockquote>
<p>例二：</p>
<blockquote>
  <p><span class="cmd">command 1 &amp;&amp; command 2 || command 3</span></p>
  <p>command 1 返回 真，那么 command 2 将执行，command 2 返回 假，那么 command 3将执行</p>
  <p>command 1 返回 假，那么 command 2、 command 3都将不执行</p>
</blockquote>
<p>例三：</p>
<blockquote>
  <p><span class="cmd">command 1 &amp;&amp; command 2 || command 3 ! command 4</span></p>
  <p>command 1 返回 真，那么 command 2 将执行，command 2 返回 假，那么 command 3将执行；command 4不执行</p>
  <p>command 1 返回 假，那么 command 2、 command 3都将不执行，command 4 将被执行</p>
</blockquote>
<p>例四：</p>
<blockquote>
  <p><span class="cmd">find --set-root /file1 || find --set-root /file2 || find --set-root /file3</span></p>
  <p>如果没有找到file1就继续找file2,还是没有找到就找file3,如果还是没有找到将会提示失败</p>
</blockquote>
<p>注意: </p>
<p>  &nbsp;&nbsp;&nbsp;&nbsp; 1.只要返回值非0都是真,否则是假。比如：</p>
<blockquote>
  <p><span class="cmd">read 0x60000 &amp;&amp; command2</span></p>
  <p>command2有可能会不被执行。因为内存地址0x60000的值有可能是0。</p>
  <p>一般情况下命令执行失败时总是返回0(假)。所以可以用于判断命令执行的结果。</p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;   2.在菜单中使用这些符号会忽略错误检测,这是一个很有用的功能.比如:</p>
<blockquote>
  <p>find --set-root /file.ext</p>
  <p>在菜单中使用时可能会返回文件未找到的错误并停止执行.必要的话我们可以使用</p>
  <p><span class="cmd">find --set-root /file.ext || echo file not found.</span></p>
  <p>这个命令在菜单中使用会显示find not found,但不停止执行</p>
</blockquote>
<HR>

<H2><A name=h>操作符 '|' and '&gt;' and '&gt;&gt;'</A></H2>
<p> 1.操作符&quot;<span class="Options">|</span>&quot; &quot;<span class="Options">&gt;</span>&quot;，用于输出重定向（有点类似DOS）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 注：1、如果和 &quot;&amp;&amp;&quot; 和 &quot;||&quot; 联合使用的话， &quot;&gt;&quot; 和 &quot;|&quot; 必须放在最后。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;  &nbsp; 2、&quot;|&quot; 和 &quot;&gt;&quot; 可以同时使用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;  &nbsp; 3、使用操作符&quot;|&quot;时如果后面是命令时默认会自动添加空格
。</p>
<p>2.操作符&quot;<span class="Options">&gt;&gt;</span>&quot;和&quot;&gt;&quot;一样，但这个会附加(附加在输出文件中的第一个字符串结束符'\0'后面)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 注：1、目前这个操作符不会改变文件大小。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;  &nbsp; 2、支持操作符连用。</p>
<p>  例1:</p>
<blockquote>
  <p><span class="cmd">pause abcd | pause efg</span></p>
  <p>输出: efgabcd</p>
</blockquote>
<p>例2：</p>
<blockquote>
  <p><span class="cmd">pause 0x60000 | read</span></p>
  <p>等同于执行 read 0x60000 命令</p>
</blockquote>
<p>例3:</p>
<blockquote>
  <p><span class="cmd">echo a | echo b | echo c | echo</span></p>
  <p>输出: cba </p>
</blockquote>
<p>例4：</p>
<blockquote>
  <p><span class="cmd">help &gt; (hd0,0)/help.txt 或 help &gt; (md)0x3000+2</span></p>
  <p>注意：本例中 help.txt 必须存在位于 (hd0,0) 上，grub4dos不能创建新文件或改变已存在文件的大小。</p>
</blockquote>
<p>例5:</p>
<blockquote>
  <p><span class="cmd">echo -n &gt; (hd0)1+62</span></p>
  <p>注意：危险的操作！！！</p>
  <p>使用\x00填充第一磁盘的2-62扇区，即清空该磁盘2-63扇区内容。 </p>
</blockquote>
<HR>

<H2><A name=i>相对路径支持的新特性</A></H2>
<p> 使用'root' 或 'rootnoverify'命令来指定'工作目录' 。</p>
<p>例如：</p>
<blockquote>
  <p><span class="cmd">root  (hd0,0)/boot/grub</span></p>
</blockquote>
<p>这就指定了当前工作目录是(hd0,0)/boot/grub 。</p>
<p>因此所有继&quot;/...&quot;之后的文件名将实际提交到(hd0,0)/boot/grub/...</p>
<p>也就是说：</p>
<blockquote>
  <p><span class="cmd">cat  /menu.lst</span></p>
</blockquote>
<p>将等同于</p>
<blockquote>
  <p><span class="cmd">cat  (hd0,0)/boot/grub/menu.lst</span></p>
</blockquote>
<HR>

<H2><A name=j>当前根设备的符号</A></H2>
<p>符号'()'可以在访问当前根设备时使用。</p>
<p>你可以使用'find --set-root ...'来设置当前根设备和 '工作目录'。</p>
<p>例如：</p>
<p> &nbsp;&nbsp;&nbsp;&nbsp; find  --set-root=/tmp  /boot/grub/menu.lst</p>
<p> 它等同于这一组命令：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;   find  --set-root  /boot/grub/menu.lst<br>
  &nbsp;&nbsp;&nbsp;&nbsp; root  ()/tmp</p>
<HR>

<H2><A name=k>引导小数点文件夹下的文件</A></H2>
(by 天涯海角1216@wuyou)<br>
<p>比如在XP系统下建立一个&ldquo;<span class="Options">IBM..</span>&rdquo;文件夹，放入IMG和ISO镜像文件，在GRUB菜单写入：</p>
<blockquote>
  <p class="bat">title 【01】 葛明阳一键GHOST V2008.08.08 奥运版<br>
    find --set-root /IBM./IBM.ICO<br>
    map --mem /<span class="Options">IBM.</span>/GMYghost.img (fd0)<br>
    map --hook<br>
    chainloader (fd0)+1<br>
    rootnoverify (fd0)</p>
</blockquote>
<p>即可成功启动IMG和ISO镜像文件！</p>
<p>注意菜单中要少写个&ldquo;.&rdquo;即&ldquo;IBM.&rdquo;。</p>
<p>但是不支持启动小数点文件夹下的WINPE.IS_ ,说明SETUPLDR.BIN不具有小数点文件夹的寻迹能力。</p>
<p>同样SYSLINUX也支持！<br>
例如：</p>
<blockquote>
  <p>LABEL grub<br>
    MENU LABEL<br>
    kernel /IBM./grub.exe</p>
</blockquote>
<HR>

<H2><A name=l>在固定位置访问一些内部变量</A></H2>
<p>也可以参见 <a href="./GRUB4DOS5命令索引.htm#read">命令索引 read 命令</a> 部分</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;地址            &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;长度            &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;说明<br>
=========	==============	==============================================<br>
0000:8208   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;启动分区号 install_partition (the boot partition)<br>
0000:8280	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;启动驱动器号(boot_drive)<br>
0000:8284	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;pxe 客户端 ip （即本地ip）<br>
0000:8288	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;pxe 服务器 ip<br>
0000:828C	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;pxe 网关 ip<br>
0000:8290	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8字节（即四字）&nbsp;&nbsp;&nbsp;最后访问的文件的大小（是执行&quot;cat --length=0&quot;后的文件大小）<br>
0000:8298	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;可用的扩展内存大小（以 KB 为单位）<br>
0000:829C	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;当前根分区号(current root partition)<br>
0000:82A0	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;当前根所在的驱动器(current root drive)<br>
0000:82A4	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;解压标志 （gzip非自动解压）,非0时不自动解压<br>
0000:82A8   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8字节（即四字）&nbsp;&nbsp;&nbsp;最后访问的分区的起始扇区号<br>
0000:82B0   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8字节（即四字）&nbsp;&nbsp;&nbsp;最后访问的分区的扇区总数<br>
0000:8278   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4字节（即双字）&nbsp;&nbsp;&nbsp;GRUB4DOS编译的日期十进制数. </p>
<p><br>
  以下命令用于判断当前使用的GRUB是否在2010-12-30日编译的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; checkrange 20101230 read 0x8278</p>
<p>其他示例可以参见命令索引 read 命令部分。</p>
<p>注意 1：Filesize 通过执行 &quot;cat --length=0 FILE&quot; 来初始化和修改。</p>
<p>  注意 2：尽量不要改写这些变量（应该只是读取），但要注意 boot 和 configfile 命令会改变启动驱动器号（即0x8280的值）。</p>
<p>  注意 3：你可以使用内存地址6000:0000开始的 1K空间作为你自己的变量区。</p>
<p>  注意 4：read 命令现在从指定的地址处返回32位整数值。</p>
<p>注意 5：grub4dos 还没有变量扩展的功能。你只能使用整数变量。你不需要申明它们，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;就可以直接使用这些内存地址。通常你需要通过一个逻辑值或者一个条件测试</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;命令来使用这些变量，即，类似这种格式：&quot;checkrange RANGE read ADDR&quot;</p>
<p>注意 6：内部变量no_decompression, saved_drive and saved_partition 是可写的。</p>
<HR>

<H2><A name=m>GRUB4DOS的批处理脚本支持</A></H2>
<p>0.4.5版本grub4dos支持运行一个批处理脚本，语法和MS-DOS的批处理几乎一模一样。</p>
<p>你不需要学习新的知识就可以应用GRUB4DOS的批处理，唯一要做的就是学习GRUB4DOS命令。</p>
<p>例子一个简单的脚本（看一下是不是和MS-DOS一样）：</p>
<blockquote>
  <p>=========GRUB4DOS BATCH SCRIPT START===============================<br>
    <span class="bat">!BAT #注：文件头!BAT是必须的用于识别这是一个GRUB4DOS批处理脚本<br>
    echo %0<br>
    echo Your type: %1 %2 %3 %4 %5 %6 %7 %8 %9<br>
    call :echo This is a test string<br>
    goto :label2<br>
    :label1<br>
    echo %1 %2 %3 %4 %5 %6 %7 %8 %9<br>
    goto :eof<br>
    :label2<br>
    echo end of batch script.</span><br>
    =========GRUB4DOS BATCH SCRIPT END===============================</p>
</blockquote>
<p>一些区别说明：</p>
<p>  1.出现错误时将停止执行。</p>
<p>2.如果需要中途停止批处理脚本的运行可以用exit 1</p>
<p>  3.%9是指剩下的所有参数。</p>
<p>  4.支持shift命令。</p>
<p>  5.可扩展参数</p>
<blockquote>
  <p class="bat">%~d0	扩展%0到磁盘号.例如：(hd0,0)，默认是()。</p>
  <p class="bat">%~p0	扩展%0到一个路径。</p>
  <p class="bat">%~n0	扩展%0到一个文件名。</p>
  <p class="bat">%~x0	扩展%0到一个文件扩展名。</p>
</blockquote>
<p>  6.在批处理脚本中若有连续多个%，在执行时在批处理会先替换两个%为一个，如：</p>
<blockquote>
  <p>set /a n=%a%%%b%</p>
  <p>执行时会先经过替换：set /a n=%a%%b%</p>
  <p>然后才会扩展变量 a 和变量 b 的值，多个变量连用时需要注意。</p>
</blockquote>
<p>7.支持字符串的截取，用法同MS-DOS。如：</p>
<blockquote>
  <p>set a=ABCDabcd1234</p>
  <p>set b=%a:~4,4%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#得到b=abcd<BR>
    set c=%a:~-8,4%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#得到c=abcd<BR>
    set d=%a:~4,-4%&nbsp;&nbsp;&nbsp;&nbsp;#得到d=abcd<BR>
    set e=%a:~-8,-4%&nbsp;&nbsp;&nbsp;#得到e=abcd<br>
    set f=%a:~,4%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#得到f=ABCD<br>
set g=%a:~,-4%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#得到g=ABCDabcd <br>
set h=%a:~4%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#得到h=abcd1234 <BR>
    set i=%a:~-4%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#得到i=1234</p>
</blockquote>
<p>8.其它用法请参考MS-DOS的批处理。</p>
<p>  在这里可以找到一些脚本<br>
  <a href="http://chenall.net/post/tag/grub4dos/" target="_blank">http://chenall.net/post/tag/grub4dos/</a></p>
<HR></BODY></HTML>
